package com.unitd.modules.sys.service;

import com.unitd.frame.comm.tree.Ztree;
import com.unitd.frame.mybatis.core.service.IBaseService;
import com.unitd.modules.sys.entity.SysMenu;

import java.util.List;
import java.util.Map;

/**
 * @desc 菜单信息表业务逻辑控制接口类
 * @filename SysMenuService.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017-04-08
 */
public interface ISysMenuService extends IBaseService<SysMenu, String> {

	/**
	 * @desc 根据主键ID获取对应的详情信息
	 * @param id 主键ID
	 * @return SysMenu
	 */
	SysMenu findBy(String id);

	/**
	 * @desc 获取所有有效菜单, 并按照层级关系进行重新组合
	 * @return List
	 */
	List<Ztree> getSysMenuTrees();

	/**
	 * @desc 根据选择的菜单父ID获取该父菜单下的最大sort值并+1
	 * @param parentId 父菜单ID
	 * @return Integer
	 */
	Integer getMaxSortByPId(String parentId);

	/**
	 * @desc 根据选择的菜单父ID及菜单类型,获取新增此菜单的主键ID
	 * @param parentId 父菜单ID
	 * @return
	 */
	String getPrePrimaryKey(String parentId);
//
//	/**
//	 * @desc 获取指定用户具有权限的菜单URL列表
//	 * @param userId 指定的用户
//	 * @return
//	 */
//	List<String> findUrlsByUserId(String userId);

	/**
	 * @desc 获取指定用户具有权限的层级菜单信息列表(一般为顶级,一级,二级共三级菜单)
	 * @param userId 指定的用户
	 * @return List
	 */
	List<SysMenu> findTreeListByUserId(String userId);

	/**
	 * @desc 处理数据保存/更新
	 * @param param 前端传送的需要处理的数据
	 * @return Integer
	 */
	Integer doEdit(Map<String, Object> param);

	/**
	 * @desc 根据ID串删除菜单
	 * @param ids 需要删除的详情信息ID串,多个ID之间用,分割
	 * @return Integer
	 */
	Integer doDelete(String ids);
}